package com.baofu.paycore.service.facade;

import com.baofu.paycore.service.facade.model.refund.req.*;
import com.system.commons.result.Result;
import com.system.commons.result.PageReqDTO;
import com.system.commons.result.PageRespDTO;
import com.baofu.paycore.service.facade.model.refund.RefundProductStrategyResDTO;
import com.baofu.paycore.service.facade.model.refund.RefundStrategyModeResDTO;
import com.baofu.paycore.service.facade.model.refund.RefundStrategyPriorityResDTO;
import com.baofu.paycore.service.facade.model.refund.RefundStrategyResDTO;

/**
 * 渠道信息Manager
 *
 * <p>
 *  1.新增退款策略配置信息
 *  2.分页获取退款策略信息
 *  3.新增退款策略信息
 *  4.修改退款策略信息
 *  5.删除退款策略信息
 *  6.获取退款策略优先级配置信息
 *  7.分页获取退款策略优先级配置信息
 *  8.新增退款策略优先级配置信息
 *  9.修改退款策略优先级配置信息
 *  10.删除退款策略优先级配置信息
 *  11.获取退款模式配置信息
 *  12.分页获取退款模式配置信息
 *  13.新增退款模式配置信息
 *  14.修改退款模式配置信息
 *  15.删除退款模式配置信息
 *  16.获取产品退款策略关联信息
 *  17.分页获取产品退款策略关联信息
 *  18.新增产品退款策略关联表信息
 *  19.修改产品退款策略关联表信息
 *  20.删除产品退款策略关联表信息
 * </p>
 * User: liu ting  Date: 16/4/26 ProjectName: paycore Version: 1.0
 */
public interface RefundStrategyServiceFacade {

    /**
     * 1.根据id查询退款策略配置信息
     *
     * @param id 查询单条信息id
     * @param traceLogId 日志ID
     * @return 返回退款策略配置信息
     */
    Result<RefundStrategyResDTO> selectRefundStrategy(Long id, String traceLogId);

    /**
     * 2.分页获取退款策略信息
     *
     * @param refundStrategyDTO 退款策略信息对象
     * @param pageReqDTO  分页显示参数信息
     * @param traceLogId 日志ID
     * @return list
     */
    Result<PageRespDTO<RefundStrategyResDTO>> selectRefundStrategyByPage(RefundStrategyQueryReqDTO refundStrategyDTO,
                                                                         PageReqDTO pageReqDTO, String traceLogId);

    /**
     * 3.新增退款策略信息
     *
     * @param refundStrategyDTO 退款策略信息对象
     * @param traceLogId 日志ID
     */
    Result<Boolean> insertRefundStrategy(RefundStrategyAddReqDTO refundStrategyDTO, String traceLogId);

    /**
     * 4.修改退款策略信息
     * @param refundStrategyDTO 退款策略信息对象
     * @param traceLogId 日志ID
     */
    Result<Boolean> updateRefundStrategy(RefundStrategyModifyReqDTO refundStrategyDTO, String traceLogId);

    /**
     * 5.删除退款策略信息
     * @param refundStrategyDTO 退款策略信息对象
     * @param traceLogId 日志ID
     */
    Result<Boolean> deleteRefundStrategy(RefundStrategyAddReqDTO refundStrategyDTO, String traceLogId);

    /**
     * 6.获取退款策略优先级配置信息
     *
     * @param id 退款策略优先级配置信息id
     * @param traceLogId 日志ID
     * @return
     */
    Result<RefundStrategyPriorityResDTO> selectRefundStrategyPriority(
            Long id, String traceLogId);


    /**
     * 7.分页获取退款策略优先级配置信息
     *
     * @param refundStrategyPriorityDTO 策略优先级配置信息对象
     * @param pageReqDTO 开始对象
     * @param traceLogId 日志ID
     * @return 退款策略优先级配置信息
     */
    Result<PageRespDTO<RefundStrategyPriorityResDTO>> selectRefundStrategyPriorityByPage(RefundStrategyPriorityQueryReqDTO
                                                                                                 refundStrategyPriorityDTO, PageReqDTO pageReqDTO, String traceLogId);

    /**
     * 8.新增退款策略优先级配置信息
     *
     * @param refundStrategyPriorityDTO 策略优先级配置信息
     * @param traceLogId 日志ID
     */
    Result<Boolean> insertRefundStrategyPriority(RefundStrategyPriorityAddReqDTO
                                                         refundStrategyPriorityDTO, String traceLogId);


    /**
     * 9.修改退款策略优先级配置信息
     *
     * @param refundStrategyPriorityDTO 退款策略优先级配置信息对象
     * @param traceLogId 日志ID
     * @return 修改结果
     */
    Result<Boolean> updateRefundStrategyPriority(
            RefundStrategyPriorityModifyReqDTO refundStrategyPriorityDTO, String traceLogId);


    /**
     * 10.删除退款策略优先级配置信息
     * @param refundStrategyPriorityDTO 款策略优先级配置信息对象
     * @param traceLogId 日志ID
     */
    Result<Boolean> deleteRefundStrategyPriority(
            RefundStrategyPriorityModifyReqDTO refundStrategyPriorityDTO, String traceLogId);


    /**
     * 11.获取退款模式配置信息
     * @param id 退款模式配置信息对象id
     * @param traceLogId 日志ID
     * @return list
     */
    Result<RefundStrategyModeResDTO> selectStrategyModeInfo(
            Long id, String traceLogId);

    /**
     * 12.分页获取退款模式配置信息
     *
     * @param refundStrategyModeDTO 退款模式配置信息对象
     * @param pageReqDTO 分页对象
     * @param traceLogId 日志ID
     * @return 退款模式配置
     */
    Result<PageRespDTO<RefundStrategyModeResDTO>> selectStrategyModeInfoByPage(
            RefundStrategyModeQueryReqDTO refundStrategyModeDTO, PageReqDTO pageReqDTO, String traceLogId);

    /**
     * 13.新增退款模式配置信息
     *
     * @param refundStrategyModeDTO 退款模式配置信息对象
     * @param traceLogId 日志ID
     */
    Result<Boolean> insertRefundStrategyMode(
            RefundStrategyModeAddReqDTO refundStrategyModeDTO, String traceLogId);


    /**
     * 14.修改退款模式配置信息
     *
     * @param refundStrategyModeDTO 退款模式配置信息对象
     * @param traceLogId 日志ID
     */
    Result<Boolean> updateRefundStrategyMode(
            RefundStrategyModeModifyReqDTO refundStrategyModeDTO, String traceLogId);


    /**
     * 15.删除退款模式配置信息
     * @param refundStrategyModeDTO 退款模式配置信息对象
     * @param traceLogId 日志ID
     */
    Result<Boolean> deleteRefundStrategyMode(
            RefundStrategyModeModifyReqDTO refundStrategyModeDTO, String traceLogId);


    /**
     * 16.获取产品退款策略关联信息
     * @param id 产品退款策略关联信息id
     * @param traceLogId 日志ID
     * @return
     */
    Result<RefundProductStrategyResDTO> selectRefundProductStrategy(
            Long id, String traceLogId);

    /**
     * 17.分页获取产品退款策略关联信息
     * @param refundProductStrategyDTO 产品退款策略关联信息
     * @param pageReqDTO 分页对象
     * @param traceLogId 日志ID
     * @return
     */
    Result<PageRespDTO<RefundProductStrategyResDTO>> selectRefundProductStrategyByPage(
            RefundProductStrategyQueryReqDTO refundProductStrategyDTO, PageReqDTO pageReqDTO, String traceLogId);

    /**
     * 18.新增产品退款策略关联表信息
     *
     * @param refundProductStrategyDTO 产品退款策略关联表信息
     * @param traceLogId 日志ID
     */
    Result<Boolean> insertRefundProductStrategy(
            RefundProductStrategyAddReqDTO refundProductStrategyDTO, String traceLogId);

    /**
     * 19.修改产品退款策略关联表信息
     *
     * @param refundProductStrategyDTO 产品退款策略关联表信息对象
     * @param traceLogId 日志ID
     */
    Result<Boolean> updateRefundProductStrategy(
            RefundProductStrategyModifyReqDTO refundProductStrategyDTO, String traceLogId);

    /**
     * 20.删除产品退款策略关联表信息
     *
     * @param refundProductStrategyDTO 产品退款策略关联表信息对象
     * @param traceLogId 日志ID
     */
    Result<Boolean> deleteRefundProductStrategy(
            RefundProductStrategyModifyReqDTO refundProductStrategyDTO, String traceLogId);

}
